// IO函子
// 1. IO函子中的_value是一个函数，这是是把函数作为值来处理
// 2. IO函子可以把不纯的操作存储到_value中，延迟执行这个不纯的操作(惰性执行)，包装当前的纯操作
// 3. 把不纯的操作交给调用者来执行
const fp = require('lodash/fp')
class IO {
    static of(value) {
        return new IO(() => value)
    }

    constructor(fn) {
        this._value = fn;
    }

    map(fn) {
        return new IO(fp.flowRight(fn, this._value))
    }
}

let r = IO.of(process).map(p => p.execPath)
console.log(r._value());
